#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Core;
using Cephei.Core.Generic;
using Microsoft.FSharp.Core;
using Cephei.QL.Math;
namespace Cephei.QL.Math.Optimization
{
    /// <summary> 
	/// ! Let \f$ \alpha \f$ and \f$ \beta \f$ be 2 scalars in \f$ [0,1] \f$.  Let \f$ x \f$ be the current value of the unknown, \f$ d \f$ the search direction and \f$ t \f$ the step. Let \f$ f \f$ be the function to minimize.  The line search stops when \f$ t \f$ verifies \f[ f(x + t \cdot d) - f(x) \leq -\alpha t f'(x+t \cdot d) \f] and \f[ f(x+\frac{t}{\beta} \cdot d) - f(x) > -\frac{\alpha}{\beta} t f'(x+t \cdot d) \f]  (see Polak, Algorithms and consistent approximations, Optimization, volume 124 of Applied Mathematical Sciences, Springer-Verlag, NY, 1997)
	/// </summary>
    [Guid ("23372147-1A39-4286-A6D9-722DC384BDDC"),ComVisible(true)]
	public interface IArmijoLineSearch : Cephei.QL.Math.Optimization.ILineSearch
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
    }   

    /// <summary> 
	/// ! Let \f$ \alpha \f$ and \f$ \beta \f$ be 2 scalars in \f$ [0,1] \f$.  Let \f$ x \f$ be the current value of the unknown, \f$ d \f$ the search direction and \f$ t \f$ the step. Let \f$ f \f$ be the function to minimize.  The line search stops when \f$ t \f$ verifies \f[ f(x + t \cdot d) - f(x) \leq -\alpha t f'(x+t \cdot d) \f] and \f[ f(x+\frac{t}{\beta} \cdot d) - f(x) > -\frac{\alpha}{\beta} t f'(x+t \cdot d) \f]  (see Polak, Algorithms and consistent approximations, Optimization, volume 124 of Applied Mathematical Sciences, Springer-Verlag, NY, 1997) Factory
	/// </summary>
   	[ComVisible(true)]
    public interface IArmijoLineSearch_Factory 
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        /// <summary> 
		/// 
		/// </summary>
	    IArmijoLineSearch Create (Microsoft.FSharp.Core.FSharpOption<Double> eps, Microsoft.FSharp.Core.FSharpOption<Double> alpha, Microsoft.FSharp.Core.FSharpOption<Double> beta);
    }
}

